Docker와 Spring boot 설정하기(Window 환경)

✒️ 2025-07-28 14:44 내용 수정


Docker 사용을 위한 Window 가상 서버 설정를 먼저 진행해야 한다.

참고 자료 : Spring Boot with Docker

1. Spring Project 설정

docker/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   ├── com.example.docker
│   │   │      ├── controller/
│   │   │      │   └── HelloController.java
│   │   │      └── DockerApplication.java
│   │   ├── resources/
│   │       ├── static/
│   │       ├── templates/
│   │       ├── application.properties
│   │       └── application.yml
├── Dockerfile
├── .dockerignore
├── mvnw
├── mvnw.cmd
└── pom.xml

Controller 설정

@RestController  
@RequestMapping("/api")  
public class HelloController {  
	@GetMapping  
	public String home() {  
		return "Docker Test";  
	}  
}

application.yml 설정

spring:  
	application:  
		name: spring-docker-demo  
  
server:  
	port: 8080  
  
app:  
	version: ${APP_VERSION:1.0.0}

.dockerignore 설정

# Docker 빌드에서 제외할 파일/폴더 추가
target/  
!target/*.jar  
*.log  
.git  
.idea  
*.iml

Dockerfile 설정

# 베이스 이미지 선택  
FROM openjdk:17-jdk-slim  
  
# 작업 디렉토리 설정  
WORKDIR /app  
  
# JAR 파일 복사  
COPY target/*.jar app.jar  
  
# 실행 명령  
ENTRYPOINT ["java", "-jar", "app.jar"]

2. Docker 빌드

프로젝트 빌드

./mvnw clean package

Docker 빌드

docker build -t <이미지명:태그> <Dockerfile경로>
docker build -t myapp:latest .
docker images

docker_springboot 1.png


3. Docker 실행

Docker 컨테이너 실행

docker run -d -p <호스트:컨테이너> --name <이름> <이미지명:태그>
docker run -d -p 8080:8080 --name myapp myapp:latest
docker ps

docker_springboot 2.png

docker_springboot 7.png

Docker 대화형 Shell 모드로 실행

docker exec -it <이미지이름:태그> <실행명령어>
docker exec -it myapp /bin/sh

컨테이너 타임존 설정

date

docker_springboot 3.png

# alpine 이미지
apk add tzdata

# python:slim, debian, ubuntu 등
apt install tzdata

docker_springboot 5.png

cat /etc/os-release

docker_springboot 4.png

# 타임존 변경
echo "Asia/Seoul" > /etc/timezone
export TZ=Asia/Seoul

# 날짜 다시 확인
date

docker_springboot 6.png

# shell 종료
exit

Docker 종료

docker stop <이름>
docker stop myapp

사용하지 않는 Docker 리소스 정리

docker system prune -a

docker-compose.yml 사용 시

# Docker Compose 파일 포맷 버전
version: '3.8'

services:
	# app 서비스
	app:
	    build:
			context: .
	    image: my-spring-app:latest
	    container_name: my-spring-app
	    ports:
			- "8080:8080"
	    # 의존성 설정
	    depends_on:
			- db
	    environment:
			SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydatabase
			SPRING_DATASOURCE_USERNAME: myuser
			SPRING_DATASOURCE_PASSWORD: mypassword

	# db 서비스
	db:
		# postgresql 서비스 정의
		image: postgres:14-alpine
		container_name: my-app-db
		ports:
			- "5432:5432"
		environment:
			POSTGRES_DB: mydatabase
			POSTGRES_USER: myuser
			POSTGRES_PASSWORD: mypassword
		volumes:
			- db_data:/var/lib/postgresql/data

# db 데이터 지속적으로 유지
volumes:
	db_data:
docker-compose up -d
docker-compose logs -f
docker-compose down